/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.output.p44;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.ICoordonneeBancaire;
import fr.generali.accueilclient.client.om.impl.CoordonneeBancaire;
import fr.generali.refservcommuns.rce.demat.servperscom.pty.referencebancaire.DtoCompteBancaire;

/**
 * @author selrhazala
 */
@Component("dtoCompteBancaire2CoordonneesBancairesP44Converter")
public class DtoCompteBancaire2CoordonneesBancairesP44Converter implements
                Converter<DtoCompteBancaire, ICoordonneeBancaire> {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory
                    .getLogger(DtoCompteBancaire2CoordonneesBancairesP44Converter.class);

    /**
     * {@inheritDoc}
     */
    public ICoordonneeBancaire convert(DtoCompteBancaire input) {
        LOGGER.debug("assemble");
        ICoordonneeBancaire coordonneeBancaire = null;

        if (input != null) {
            coordonneeBancaire = new CoordonneeBancaire();
            // Ne devrait pas être null mais on sait jamais
            if (input.getIdentifiant() != null) {
                coordonneeBancaire.setIdentifiant(input.getIdentifiant());
            }

            // Ne devrait pas être null mais on sait jamais
            if (input.getNumOrdre() != null) {
                coordonneeBancaire.setNumOrdre(input.getNumOrdre());
            }

            coordonneeBancaire.setCle(input.getCleRIB());
            coordonneeBancaire.setCompte(input.getNumeroCompte());
            coordonneeBancaire.setCodeBanque(input.getCodeEtablissement());
            if (input.getAgenceBancaire() != null) {
                coordonneeBancaire.setGuichet(input.getAgenceBancaire().getCodeAgence());
            }

            String codeIbanKO = input.getCodeIBAN();
            if (StringUtils.isNotEmpty(codeIbanKO)) {
                String codeIban =
                                (codeIbanKO.indexOf("null")) == -1 ? codeIbanKO : codeIbanKO.substring(0,
                                                codeIbanKO.indexOf("null"));
                int i = 0;
                while (i < codeIban.length()) {
                    switch (i) {
                        case 0:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban1(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban1(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 4:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban2(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban2(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 8:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban3(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban3(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 12:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban4(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban4(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 16:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban5(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban5(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 20:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban6(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban6(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 24:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban7(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban7(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 28:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban8(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban8(codeIban.substring(i, codeIban.length()));
                            }
                            break;
                        case 32:
                            if ((i + 4) < codeIban.length()) {
                                coordonneeBancaire.setIban9(codeIban.substring(i, i + 4));
                            } else {
                                coordonneeBancaire.setIban9(codeIban.substring(i, codeIban.length()));
                            }
                            break;

                        default:
                            break;
                    }

                    i += 4;
                }
            }

            if (input.getBanqueGestionnaire() != null) {
                coordonneeBancaire.setNomBanque(input.getBanqueGestionnaire().getNom());
                coordonneeBancaire.setBic(input.getBanqueGestionnaire().getCodeBIC());
            }

            if (input.getTitulaireCompteBancaire() != null && !input.getTitulaireCompteBancaire().isEmpty()) {
                coordonneeBancaire.setTitulaire(input.getTitulaireCompteBancaire().get(0));
            }
        }

        return coordonneeBancaire;
    }
}
